package com.boil.util;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;

/**
 * 反射工具类。
 *
 * @author ChenYong
 * @date 2016-11-22
 */
public final class ReflectUtils {
    /**
     * 日志
     */
    private static Logger log = LoggerFactory.getLogger(ReflectUtils.class);

    /**
     * 获取字段值。
     *
     * @param bean      实例
     * @param fieldName 字段名称
     * @return 字段值
     */
    public static Object getFieldValue(Object bean, String fieldName) {
        try {
            if ((bean == null) || StringUtils.isBlank(fieldName)) {
                return null;
            }

            // 获取类类型
            Class<?> clazz = bean.getClass();
            // 获取字段
            Field field = clazz.getDeclaredField(fieldName);

            // 设置字段可以访问
            field.setAccessible(true);

            return field.get(bean);
        } catch (Exception e) {
            log.error("反射工具类，获取字段值时出现异常，异常信息如下：{}", e);

            return null;
        }
    }
}